package com.scpii.universal.dispatch.service;

import java.util.List;

import com.google.protobuf.InvalidProtocolBufferException;
import com.scpii.universal.dispatch.domain.CompileTask;
import com.scpii.universal.pb.UniversalProtocol.GetPackInfoSC;

/**
 * 应用编译任务管理
 * 
 * @author chenxin
 * 
 */
public interface CompileTaskService {

	/**
	 * 查询任务
	 * 
	 * @param intStatus
	 *            任务状态
	 * @待打包状态:WAIT_PACK_STATE
	 * @打包完毕状态:COMPLETE_PACK_STATE
	 * @编译完毕状态:COMPLETE_COMPILE_STATE
	 * @return
	 */
	public List<CompileTask> getTask(Integer status);

	/**
	 * 查询任务 by appUpdateId
	 * 
	 * @param appUpdateId
	 *            任务更新ID
	 * @return
	 */
	public List<CompileTask> getTaskByAppUpdateId(Integer appUpdateId);

	/**
	 * 查询任务 by appUpdateId,返回PB数组
	 * 
	 * @param appUpdateId
	 *            任务更新ID
	 * @return
	 */
	public byte[] getTaskByAppUpdateIdAsPb(Integer appUpdateId);

	/**
	 * 查询待编译任务,返回PB数组
	 * 
	 * @param intAppOsType
	 *            应用类型（Android/IOS）
	 * @return
	 */
	public byte[] getWaitCompileTaskAsPb(Integer appOsType);

	/**
	 * 查询待编译任务
	 * 
	 * @return
	 */
	public List<CompileTask> getWaitCompileTask();

	/**
	 * 查询待编译任务
	 * 
	 * @param intAppOsType
	 *            应用类型（Android/IOS）
	 * @return
	 */
	public List<CompileTask> getWaitCompileTask(Integer appOSType);

	/**
	 * 设置任务为编译完毕状态
	 * 
	 * @param taskId
	 *            任务ID
	 */
	public void updateCompleteCompileTask(Integer taskId, String fileUrl);

	/**
	 * 批量设置任务为编译完毕状态
	 * 
	 * @param tasks
	 *            任务集合
	 */
	public void updateCompleteCompileTaskBatch(List<CompileTask> tasks);

	/**
	 * 创建编译任务
	 * 
	 * @param intCompileTaskId
	 *            编译任务ID
	 * @param intAppUpdateId
	 *            应用更新ID
	 * @param intAppOsType
	 *            系统类型
	 * @param varAppSign
	 *            应用标示
	 * @param varAppName
	 *            应用名称
	 * @param appVersion
	 *            应用版本
	 * @param intSytleId
	 *            风格ID
	 * @return
	 */
	public byte[] creatComplieTask(Integer intCompileTaskId,
			Integer intAppUpdateId, Integer intAppOsType, String varAppSign,
			String varAppName, String appVersion, Integer intSytleId);

	/**
	 * 获取编译完成任务
	 * 
	 * @return
	 */
	public List<CompileTask> qryFinishComplieTask();

	/**
	 * 获取编译完成任务,返回PB数组
	 * 
	 * @return
	 */
	public byte[] qryFinishComplieTaskAsPb();

	/**
	 * 获取中间层获取打包信息
	 * 
	 * @param intAppUpdateId
	 *            应用更新ID
	 * @return
	 * @throws InvalidProtocolBufferException
	 */
	public GetPackInfoSC getPackInfo(Integer appUpdateId)
			throws InvalidProtocolBufferException;

	/**
	 * 设置任务为打包完毕状态
	 * 
	 * @param taskId
	 *            任务ID
	 */
	public void updateCompletePackTask(Integer taskId);

	/**
	 * 设置任务为失败
	 * 
	 * @param taskId
	 *            任务ID
	 */
	public void updateCompileTaskFaile(Integer taskId, String erroMsg);

	/**
	 * 获取Seq
	 * 
	 * @return
	 */
	public int getSeq();
}
